package service

import (
	"github.com/sirupsen/logrus"
	"hcy-gateway/global"
	"net/http"
	"net/http/httputil"
	"net/url"
	"strings"
)

type Proxy struct {
}

// ServeHTTP 简单的代理服务，后续需要对url第一级进行裁剪，添加配置项等
// 正式使用时应该使用类似 manba 这种功能完备的网关
// https://github.com/fagongzi/manba
func (p *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	uri := r.URL.String()
	uriPath := strings.Split(uri, "/")
	switch uriPath[2] {
	case "sys":
		// NewSingleHostReverseProxy 对于 RUL部分没有做裁剪，默认引用 req.url，要裁剪应该裁剪 req.url，这样target会自动裁剪
		remote, err := url.Parse(global.Conf.Proxy.Sys)
		if err != nil {
			logrus.Errorf("sys 模块接口代理时发生错误：%s", err)
		}
		httputil.NewSingleHostReverseProxy(remote).ServeHTTP(w, r)
	case "lms":
		remote, err := url.Parse(global.Conf.Proxy.Lms)
		if err != nil {
			logrus.Errorf("lms 模块接口代理时发生错误：%s", err)
		}
		httputil.NewSingleHostReverseProxy(remote).ServeHTTP(w, r)
	case "idp":
		remote, err := url.Parse(global.Conf.Proxy.Idp)
		if err != nil {
			logrus.Errorf("idp 模块接口代理时发生错误：%s", err)
		}
		httputil.NewSingleHostReverseProxy(remote).ServeHTTP(w, r)
	case "vap":
		remote, err := url.Parse(global.Conf.Proxy.Vap)
		if err != nil {
			logrus.Errorf("idp 模块接口代理时发生错误：%s", err)
		}
		httputil.NewSingleHostReverseProxy(remote).ServeHTTP(w, r)
	default:
		logrus.Errorf("未知代理路由：%s", uri)
		_, _ = w.Write([]byte("未知代理路由"))
	}
}
